package com.yxqz.manage_cms_client.mq;

import com.alibaba.fastjson.JSON;
import com.xuecheng.framework.domain.cms.CmsPage;
import com.yxqz.manage_cms_client.dao.CmsPageRepository;
import com.yxqz.manage_cms_client.service.PageService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.Map;
import java.util.Optional;

/**
 * 监听Mq，接受页面发布的消息
 *
 * @author 鱼香茄子
 * @data 2021/10/26
 */

@Component
public class ConsumerPostPage {

    //    添加日志
    private static final Logger LOGGER = LoggerFactory.getLogger(PageService.class);

    @Autowired
    CmsPageRepository cmsPageRepository;

    //    当前模板的service
    @Autowired
    PageService pageService;

    /**
     * queues 队列名称：从配置文件中获取
     *
     * @param msg 消息
     */
    @RabbitListener(queues = {"${yxqz.mq.queue}"})
    public void postPage(String msg) throws IOException {
        System.out.println(msg);
//解析消息，获取json格式的消息，转成Map格式
        Map map = JSON.parseObject(msg, Map.class);
        LOGGER.info("MQ监听日志——成功获取到的mq中的消息:{}", msg.toString());
//取出页面id
        String pageId = (String) map.get("pageId");
//查询页面信息（校验获取的mq中的消息中的pageid字段信息正确是否）
        Optional<CmsPage> optional = cmsPageRepository.findById(pageId);
        if (!optional.isPresent()) {
            LOGGER.error("MQ监听日志——没有获取到消息不读哦:{}", msg.toString());
            return;
        }
//将页面保存到服务器物理路径
        pageService.savePageToServerPath(pageId);
    }
}


